CodePipeline(V2)のファイルパスのトリガーを試してみた
CodePipelineで以下のアップデートがありました。
CodePipeline supports additional trigger filters and new execution modes
上記の記事では、大きく以下のアップデートが発表されていました。
- ブランチおよびファイルパスによるトリガーフィルタリングのサポート
- 新しいパイプライン実行モードのサポート
上記の中で特に気になった、ファイルパスによるトリガーについて書きました。
概要
- CodePipelineファイルパスによるトリガーフィルタリングのサポート
- ファイルパスに一致する場合に、トリガー実行といったことが可能に
- CodeCommitはトリガーフィルター自体に対応していないため、使用不可
- フィルターはglobパターンで設定可能
- 1つのパイプラインに複数のトリガーフィルタリングを追加可能
何が嬉しい
- モノレポ構成でパイプラインの制御がしやすくなる
モノレポ構成ではリポジトリのPushの度に全てに対してCI/CDを実行すると時間がかるため、システム毎やレイヤーごとにパイプラインを分けたいことがあると思います。
以下に3システムあるとします。
hoge-system fuga-system piyo-system
トリガーのファイルパスをhoge-system
にすることで、hoge-system
配下に変更があった際にだけ、起動するトリガーを作ることができます。
コードのプッシュまたはプルリクエストでトリガーをフィルターする - AWS CodePipeline
やってみた
事前準備
GitHubでリポジトリtest-codepipeline-file-path-triggerを作成しました。
以下のディレクトリとファイルを用意して、上記リポジトリにPushしました。
% tree . ├── fuga-system │ └── test.txt ├── hoge-system │ └── test.txt └── piyo-system └── test.txt
CodePipelineの作成
「マネジメントコンソール」 -> 「CodePipeline」 -> 「パイプライン」 -> 「パイプラインを作成する」の順に選択します。
ファイルパストリガーに対応しているのは、V2のみです。
パイプラインタイプがv2になっていることを確認し、次に進みます。
ソースステージは作成したリポジトリを選択します。
トリガーは、以下の設定を行います。
- トリガータイプ: フィルターを指定
- イベントタイプ: プッシュ
- ブランチ: 含める main
- ファイルパス: 含める hoge-system/**
ファイルパスやブランチに設定するフィルターは、globパターンがサポートされています。
今回は、hoge-system
配下の変更をトリガーにしたいため、hoge-system/**
と設定しています。
パイプラインの発火を確認できればいいためスキップしたいところですが、パイプラインには少なくとも2つのステージ(ソース含めて)が必要です。
プロジェクトの作成
から適当にビルドプロジェクトを作成し、指定します。
デプロイステージはスキップして、レビュー画面で内容を確認し、パイプラインを作成します。
動作確認
トリガーに設定している、hoge-system
配下を変更して、CodePipelineが実行されるか確認します。
以下の箇所を変更して、Pushしました。
+ Hello Hoge System
git add . git commit -m "update: hoge system" git push origin main
コンソールから実行されていることを確認できました。
続いてターゲット以外の変更で、Pipelineが実行されないことを確認します。
+ Hello Fuga System
git add . git commit -m "update: fuga system" git push origin main
Pipelineは実行されませんでした。実行履歴は以下の通りで、hoge-system
の変更以降はパイプラインが実行されていません。
おわりに
他のCI/CDツールと比べて、CodePipelineがファイルパスに対応していないことを不便に思っていた方は多いのではないでしょうか。
個人的には待望の機能でした。CodeCommitが対応していない点は残念ですが、今後に期待ですね。
以上、AWS事業本部の佐藤(@chari7311)でした。